在本系列的第2~5篇中有稍微提到過,這邊列點整理
ActiveModel
可以直接更新資料,而以 Boxenn
建立的 domain 則是必須透過 repository
,較不容易向外溢出 DAL 邏輯。Boxenn::Entity
建立的物件則完全不依賴外部資源,進而達到執行速度快的測試。一開始沒有制定 DAL 的介面時,會花很多時間來想要怎麼實踐和通用化。但後來收斂成 Boxenn
後,最花時間的是討論 domain 內的 aggregate 要怎麼設計及要以哪個 entity 當 agrregate root, 然而這步正好是蒐集領域知識、深入了解領域專家想法後的產物,因此值得花費較久時間設計來得到貼近現實世界的領域。當有了 aggregate 後,剩下的部分就可以很快速地建立。
不一定,我們只有在擁有複雜業務邏輯的領域才會使用 DDD 來解決。除此之外, 如果遇到讀取複雜的領域,Boxenn
也可以實做 readonly domain,Write 則使用原本的 AactiveRecord
。
這邊有點 CQRS pattern 的味道。